I'm learning TCP and was trying out a client/server program. My server side is working, but on my client side, I can't connect successfully to the server side.
Error Codes on my Client Side
First Error:
Traceback (most recent call last): File "tcpclient.py", line 13, in clientSocket.connect((serverName, serverPort)) TypeError: str, bytes or bytearray expected, not list
Second Error:
Traceback (most recent call last): File "tcpclient.py", line 34, in clientSocket.send(clientSentence.encode(), serverAddress) TypeError: an integer is required (got type tuple)
Server Code: This code runs successfully.
import sys
from socket import*
serverSocket = socket(AF_INET, SOCK_STREAM)
serversys = sys.argv
if len(serversys) == 1:
serverPort = 9999
else:
serverPort = serversys[1]
serverPort = int(serverPort)
serverSocket.bind(('', serverPort))
serverSocket.listen(1)
print ("The server is ready to receive.")
while True:
connectionSocket, addr = serverSocket.accept()
print ("Connection accepted from: ", addr)
clientSentence = connectionSocket.recv(1024).decode()
clientSentence, clientAddress = serverSockset.recv(1024)
clientSentence.decode()
connectionSocket.close()
if clientSentence[0].decode() == 'U':
serverSentence = clientSentence.upper()
connectionSocket.send(serverSentence[1:].encode(), clientAddress)
connectionSocket.close()
elif clientSentence[0].decode() == 'L':
serverSentence = clientSentence.lower()
connectionSocket.send(serverSentence[1:].encode(), clientAddress)
connectionSocket.close()
elif clientSentence[0].decode() == 'I':
serverSentence = clientSentence.title()
connectionSocket.send(serverSentence[1:].encode(), clientAddress)
connectionSocket.close()
Client: This is where the two errors occur.
import sys
from socket import*
clientSocket = socket(AF_INET, SOCK_STREAM)
clientsys = sys.argv
serverName = clientsys[1:]
serverPort = clientsys[2:]
clientSocket.connect((serverName, serverPort)) #First Error
serverPort = [int(serverPort) for serverPort in serverPort]
serverAddress = (serverName, serverPort)
sentenceChoice = input("Enter U for UPPERCASE SENTENCE, L for lowercase sentence, \nor I for Initial Caps Sentence: ")
sentence = input("Enter sentence: ")
clientSentence = sentenceChoice+sentence
clientSocket.send(clientSentence.encode(), serverAddress) #Second Error
serverSentence = clientSocket.recv(1024)
print('From Server: ', serverSentence.decode())
clientSocket.close()
Your first error is caused by you using a list slice for the server name and port. Change to this:
serverName = clientsys[1]
serverPort = clientsys[2]
Your second error is because socket.send()
doesn't accept the serverAddress
tuple parameter (where you thinking of socket.sendto()
? Either way, you can fix by simply removing the parameter:
clientSocket.send(clientSentence.encode())
Link to socket.send
docs: https://docs.python.org/3/library/socket.html#socket.socket.send