Python implementation of Netcat, new design
test.py

If you look at the definition of main(), you will see that it doesn't explicitly return anything.  By default, functions return None, so you will always be exiting with None.  Since it is always the same, it is useless even to use sys.exit().  The program will exit once the file has been read, so you don't need to tell Python to do that.  If you want to use exit codes, you'll need main() to return them.

main() doesn't use its arguments, so why give it any?  If sys.argv is ignored, take it out and remove the useless import of sys.

netcat.py


if s in r:
    if not cat_line(sf, outfile):
        break



The only time your program does something in the case of s in r is when not cat_line(sf, outfile).  Since you want to handle only the cases where both are true, use and:

if s in r and not cat_line(sf, outfile):
    break


Same with the next if block.  I wouldn't recommend it because it makes your lines too long, but you could put both if blocks in one:

if ((s in r) and not cat_line(sf, outfile)) or ((infile in r) and not cat_line(infile, sf):
    break


servers.py and cat.py look okay to me, but my opinion is that you don't need multiple files.  You don't have a bunch of lines that need to be split up, so you might as well put all of it in one file (not including test.py).